simdi her bir fonksiyonun bir sonucu vardir. mesela matematikte f(x)=x2 fonksiyonunu dusunelim. f(x) fonksiyonunun sonucu nedir? x2'dir dimi? iste return tam olarak budur... fonksiyonun sonuc olarak ne verecegidir...
fonksiyonu bir makine olarak dusunebiliriz. bir hammadde girer, bir urun cikarir...
mesela patates cipsi uretelim. y=f(x), patates cipsi ureten bir fonksiyon olsun.
burada x'imiz, yani girdimiz patates olmak zorunda. y'miz, yani ciktimiz ise cips oluyor. iste C ve diger programlama dillerinde de her fonksiyonun bir girdisi, bir de ciktisi vardir. ama bazen bir girdisi, bazen ciktisi, bazen de her ikisi birden olmak zorunda degildir. ornekler vereyim...
fonksiyonumuz kendisine verilen malzemelerden salata yapsin. bu fonksiyonda girdilerimiz domates, salatalik, marul vs'dir. ciktimiz ise salatadir.
salata salataYapmaFonksiyonu(salatalik x, domates y, marul z)
{
salata mySalata;
mySalata=karistir(kes(x),kes(y),kes(z));
return mySalata;
}
ama diyelim bir fonksiyonumuz bana rastgele bir sayi versin. bu fonksiyona girdi vermemize gerek yok. ama ciktisi nedir? rastgele sayimizdir.
int rastgeleSayiUretenFonksiyon(){
int randomSayi = random();
return randomSayi;}
diyelim ki fonksiyonumuz yerleri paspaslamak olsun. burada girdi de yoktur cikti da yoktur.
void yerleriPaspasla(){
paspasla()
}//dikkat ettiniz mi, void fonksiyonlarda return yazmiyoruz
ama eger sana bir sayi verecem, bunu ekrana yaz istegine cevap veren bir fonksiyon varsa bunun girdisi vardir ama ciktisi yoktur.
void ekranaSayiYaz(int x)
{
printf("%d",x);
}
bunun gibi sacma yahut anlasilmaz bir girizgah yaptik... neyse, devam edelim...
simdi beraber bir f(x)= x2 fonksiyonunu algoritma ile anlatalim...
yani bilgisayara diyecegiz ki:
kardesim, simdi sana yeni bir fonksiyon ogretecegim.
fonksiyonun adi kareleme olsun
bu bir tamsayiyi alip karesini verecek bana
bunun icin, once sana diyorum ki, bu "kareleme" adli fonksiyon bir tamsayiyi girdi olarak alir
sonra da diyorum ki sonuc olarak bir tamsayi verir
bu fonksiyonun icinde olan da $udur, girdi olarak aldigi tamsayinin karesini hesaplar.
sonra da bu kareyi sonuc olarak verir.
simdi C'de bunu nasil yapiyoruz gosterelim:
1.kardesim, simdi sana yeni bir fonksiyon ogretecegim.
fonksiyonun adi kareleme olsun:
kod:
.... kareleme(.......){
.......
}
2.bu bir tamsayiyi alip karesini verecek bana:
kod:
//this function takes an integer and returns to its square value
.... kareleme(.......){
......
}
3.bunun icin, once sana diyorum ki, bu "kareleme" adli fonksiyon bir tamsayiyi girdi olarak alir:
kod:
//this function takes an integer and returns to its square value
.... kareleme(int x){
.......
}
4.sonra da diyorum ki sonuc olarak bir tamsayi verir:
kod:
//this function takes an integer and returns to its square value
int kareleme(int x){
int y;
......
return y;
}
5.bu fonksiyonun icinde olan da $udur, girdi olarak aldigi tamsayinin karesini hesaplar.
sonra da bu kareyi sonuc olarak verir:
kod:
//this function takes an integer and returns to its square value
int kareleme(int x){
int y;
y = x * x;
return y;
}
boylece kodumuzu tamamlamis olduk....
simdi bu fonksiyonumuzu main fonksiyonu icinde cagiralim:
int main()
{
int girilenSayi;
int sonuc;
printf("bi tamsayi gir:");
scanf("%d",&girilenSayi);
sonuc=kareleme(girilenSayi);
printf("%d'nin karesi %d eder.",girilenSayi,sonuc);
return 0;
}
eger kareleme fonksiyonumuza return y yazmasaydik. bilgisayar y degerine girilen x degerinin karesini atardi ama bunu bize sonuc olarak vermezdi.
o zaman da sonuc=kareleme(girilenSayi) diyemezdik... cunki sonuc bir int degeri ve bir int degeri ile eslesmesi gerekiyor. oysa kareleme fonksiyonunun bir int degerine esit olmasi icin bir int degerini sonuc olarak kabul edip return type'i olan o sonuca esitlenmesi lazim...
yani bir pastaneye dort musteri gelsin ve dordu de ayni kek'ten istesin... o zaman bir kek fonksiyonumuz olsun:
kek elmaliKek (un x, sut y, seker z, elma q)
{
hamkek x1= karistir(x,y,z,q);
kek x2 = pisir(x1);//buradan anliyoruz ki pisir fonksiyonunun prototype'i [kek pisir(hamkek x)] olmali
return x2;
}
simdi main fonksiyonda 4 tane kekimiz olsun:
int main()
{
kek kek1;
kek kek2;
kek kek3;
kek kek4;
kek1 = elmaliKek(guzelUn,falanYag,tozSeker,5elma);
kek2 = kek1;
kek3 = kek1;
kek4 = kek1;
return 0;
}
olmus olur...
neden int main fonksiyonuna return 0 yaziyoruz diyorsaniz... main bir fonksiyondur. fonksiyonun isi ise programinizin basindan sonuna kadar ne yaparsaniz onu calistirmaktir. [int main()] bir int fonksiyondur. yani sonuc olarak bir tamsayi dondurur. bu tamsayi ise c compiler'imize bir sifre mahiyetindedir. compiler eger int main() sifir dondururse programimizi normal kapanacak sekilde derler... ama baska bir deger donerse (1, 2, 4593 gibi) programimizi kaparken baska seyler yap yahut su mesaji vererek kapa vs, gibi bir islem yapar. ne yazik ki her c compileri 0 degeri icin main fonksiyonunda programi normal sekilde kapatsa da sifir olmayan sonuclar icin belirli bir standart yoktur, compilerdan compilera degisir... evet, C dili her ne kadar standart bir dil olsa da piyasada cesitli farkli derleyiciler (compiler) mevcuttur. her biri programimizi kendi gereksinimlerine gore uretir. kimisi paralidir, kimisi belestir...
siz en iyisi int main() fonksiyonunu degil de void main() fonksiyonunu kullanin. o zaman return yazmaniz gerekmez... ornek:
#include <stdio.h>
void main()
{
printf("Welcome to C!\n");
}
//evet, hepsi bu kadar... return 0 yazmamiza gerek kalmadi...
0